home *** CD-ROM | disk | FTP | other *** search
- program TstDate;
-
- {$IFDEF Win32}
- {$APPTYPE CONSOLE}
- {$ENDIF}
-
- uses
- SysUtils,
- {$ifdef windows}
- WinTypes, WinProcs, WinCrt,
- {$else}
- Windows,
- {$endif}
- AADate in 'AADate.pas';
-
- {$ifdef windows}
- type
- DWORD = longint;
- {$endif}
-
-
- var
- Dt, Dt2 : TaaDate;
- Y, M, D, W : integer;
- LastY, LastM, LastD : integer;
- OK : boolean;
- i : integer;
- StartTime, EndTime : DWORD;
- TDT, TDT2 : TDateTime;
- YY, MM, DD : word;
- DOW : TaaDOW;
- GregDate : longint;
- MyHols : TaaHolidayList;
- begin
- writeln('Testing...');
- try
- writeln('Full test');
- LastY := 1799;
- LastM := 12;
- LastD := 31;
- for Dt := 0 to 146096 do begin
- aaDateToYMD(Dt, Y, M, D);
- if (Y = LastY) and (M = LastM) and (D = LastD+1) then
- OK := true
- else if (D <> 1) then
- OK := false
- else if (Y = LastY) and (M = LastM+1) then
- OK := true
- else if (M <> 1) then
- OK := false
- else if (Y = LastY+1) then
- OK := true
- else
- OK := false;
- if not OK then begin
- writeln('seq error at ', Y:5, M:3, D:3, ' Date: ', Dt);
- readln;
- end;
- LastY := Y;
- LastM := M;
- LastD := D;
-
- Dt2 := aaYMDToDate(Y, M, D);
- if (Dt2 <> Dt) then begin
- writeln('error at ', Y:5, M:3, D:3, ' Date: ', Dt, ' <> ', Dt2);
- readln;
- end;
- end;
- writeln('End full test');
-
- writeln('today and the previous/next week');
- writeln(ShortDateFormat, ' ', LongDateFormat);
- writeln(aaDateToStr(aaToday, dfLotus));
- writeln(aaDateToStr(aaToday, dfLotusDOW));
- writeln(aaDateToStr(aaToday, dfWindows));
- writeln(aaDateToStr(aaToday, dfDMY));
- writeln(aaDateToStr(aaToday, dfMDY));
- writeln(aaDateToStr(aaToday, dfYMD));
- for DOW := aaSunday to aaSaturday do begin
- writeln(aaDateToStr(aaNextDayOfWeek(aaToday, DOW), dfLotusDOW), ' ',
- aaDateToStr(aaPrevDayOfWeek(aaToday, DOW), dfLotusDOW));
- end;
- readln;
-
- writeln('Dates from today: from -10 months to 10 months');
- for i := -10 to 10 do begin
- writeln(i:4, ' ', aaDateToStr(aaDateAddMonths(aaToday, i, false), dfLotusDOW));
- end;
- readln;
- writeln('Dates from 31-Jul-1999: from -10 months to 10 months');
- for i := -10 to 10 do begin
- writeln(i:4, ' ', aaDateToStr(aaDateAddMonths(aaYMDToDate(1999, 7, 31), i, false), dfLotusDOW));
- end;
- readln;
- writeln('Dates from 28-Feb-1999: from -10 months to 10 months, sticky');
- for i := -10 to 10 do begin
- writeln(i:4, ' ', aaDateToStr(aaDateAddMonths(aaYMDToDate(1999, 2, 28), i, true), dfLotusDOW));
- end;
- readln;
- writeln('Dates from 28-Feb-1999: from -10 months to 10 months, nonsticky');
- for i := -10 to 10 do begin
- writeln(i:4, ' ', aaDateToStr(aaDateAddMonths(aaYMDToDate(1999, 2, 28), i, false), dfLotusDOW));
- end;
- readln;
-
- writeln('ISO date check...');
- for Dt := 365 to 146096-365 do begin
- aaDateToISODate(Dt, Y, W, D);
- if (Dt <> aaISODateToDate(Y, W, D)) then begin
- write('ISO error at ', aaDateToStr(Dt, dfLotusDOW));
- readln;
- end;
- end;
-
- (*
- writeln('nonsticky date month difference test');
- for Dt := 73000 to 75000 do
- for Dt2 := Dt to 75000 do begin
- M := aaDateDiffInMonths(Dt, Dt2, false, D);
- if (Dt2 <> (aaDateAddMonths(Dt, M, false) + D)) then begin
- writeln('error in month arithmetic');
- readln;
- end;
- end;
- writeln('sticky date month difference test');
- for Dt := 73000 to 75000 do
- for Dt2 := Dt to 75000 do begin
- M := aaDateDiffInMonths(Dt, Dt2, true, D);
- if (Dt2 <> (aaDateAddMonths(Dt, M, true) + D)) then begin
- writeln('error in month arithmetic');
- readln;
- end;
- end;
- writeln('done date month difference tests');
- readln;
- *)
-
- (*
- writeln('Speed test');
- StartTime := GetTickCount;
- for i := 1 to 20 do begin
- for Dt := 0 to 146096 do begin
- aaDateToYMD(Dt, Y, M, D);
- if aaYMDToDate(Y, M, D) <> Dt then
- writeln('error in speed test');
- end;
- end;
- writeln(GetTickCount-StartTime);
-
- StartTime := GetTickCount;
- for i := 1 to 20 do begin
- for Dt := 0 + 1000 to 146096 + 1000 do begin
- TDT := Dt;
- DecodeDate(TDT, YY, MM, DD);
- if EncodeDate(YY, MM, DD) <> TDT then
- writeln('error in speed test');
- end;
- end;
- writeln(GetTickCount-StartTime);
- *)
-
- writeln('Business day testing');
- MyHols := TaaHolidayList.Create;
- try
- for Dt := aaYMDToDate(1990, 1, 31) downto aaYMDToDate(1990, 1, 1) do
- MyHols.AddHoliday(Dt);
- for Dt := aaYMDToDate(1999, 10, 31) downto aaYMDToDate(1999, 10, 1) do
- MyHols.AddHoliday(Dt);
- MyHols.AddHoliday(aaYMDToDate(1999, 6, 2));
- MyHols.AddHoliday(aaYMDToDate(1999, 6, 3));
- MyHols.AddHoliday(aaYMDToDate(1999, 5, 31));
- for Dt := aaYMDToDate(1999, 5, 25) to aaYMDToDate(1999, 6, 8) do
- writeln(aaDateToStr(Dt, dfLotusDOW), ' ',
- MyHols.IsBusinessDay(Dt));
- readln;
- writeln('next business day testing');
- Dt := aaYMDToDate(1999, 5, 25);
- Dt2 := aaYMDToDate(1999, 6, 8);
- while Dt < Dt2 do begin
- write(aaDateToStr(Dt, dfLotusDOW), ' -> ');
- Dt := MyHols.NextBusinessDay(Dt);
- writeln(aaDateToStr(Dt, dfLotusDOW));
- end;
- readln;
- writeln('prev business day testing');
- Dt := aaYMDToDate(1999, 5, 25);
- Dt2 := aaYMDToDate(1999, 6, 8);
- while Dt2 > Dt do begin
- write(aaDateToStr(Dt2, dfLotusDOW), ' -> ');
- Dt2 := MyHols.PrevBusinessDay(Dt2);
- writeln(aaDateToStr(Dt2, dfLotusDOW));
- end;
- readln;
- writeln('nearest business day testing - not same month');
- for Dt := aaYMDToDate(1999, 5, 25) to aaYMDToDate(1999, 6, 8) do begin
- write(aaDateToStr(Dt, dfLotusDOW), ' -> ');
- Dt2 := MyHols.NearestBusinessDay(Dt, false);
- writeln(aaDateToStr(Dt2, dfLotusDOW));
- end;
- readln;
- writeln('nearest business day testing - same month');
- for Dt := aaYMDToDate(1999, 5, 25) to aaYMDToDate(1999, 6, 8) do begin
- write(aaDateToStr(Dt, dfLotusDOW), ' -> ');
- Dt2 := MyHols.NearestBusinessDay(Dt, true);
- writeln(aaDateToStr(Dt2, dfLotusDOW));
- end;
- readln;
- writeln('other holiday testing');
- writeln('..count prior to ClearBefore: ', MyHols.HolidayCount);
- MyHols.ClearBefore(aaYMDToDate(1990, 2, 1));
- writeln('..count after ClearBefore: ', MyHols.HolidayCount);
- for Dt := aaYMDToDate(1999, 10, 1) to aaYMDToDate(1999, 10, 31) do
- MyHols.DeleteHoliday(Dt);
- writeln('..count after deletes: ', MyHols.HolidayCount);
- for i := 0 to pred(MyHols.HolidayCount) do
- writeln(aaDateToStr(MyHols[i], dfLotusDOW));
- finally
- MyHols.Free;
- end;
- except
- on E:Exception do
- writeln(E.Message);
- end;
- writeln('Done');
- readln;
- end.
-